/**
 * 首先总满意度最小应该按照时间从小到大排列
 * 再考虑插队的情况。
 * 假设插入到第i个人的位置，即原i位置及其后面的人均后移
 * 这些人的完成时间都推迟一个Tc
 * 假设最多可以插队n个人，则 n*Tc <= M
 * n是满足该不等式的最大整数, 即 n = (M/Tc)取整
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;


using llt = long long;
using Real = double;
using vi = vector<int>;
using pii = pair<int, int>;

int N, Q, Tc;
vi T;
vector<llt> Sum;
llt Total;

llt proc(llt capa){
    llt offset = capa / Tc;
    if(offset >= N) offset = 0;
    else offset = N - offset;
    return Sum[offset] + Tc;
}

void proc(){
    sort(T.begin(), T.end());

    Sum.assign(N + 1, 0);
    Total = 0;
    for(int i=0;i<N;++i) Total += Sum[i + 1] = Sum[i] + T[i];

    for(int q=0;q<Q;++q){
        llt m; cin >> m;
        cout << proc(m) << "\n";   
    }
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> N >> Q >> Tc;
        T.assign(N, {});
        for(auto & i : T) cin >> i;
        proc();
    }
    return 0;
}